home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1986-04-20 | 2.3 KB | 79 lines |
- 10 SCREEN 0:CLS:WIDTH 80:PRINT"Reciever Operating Characteristic Curve Generator":PRINT
- 20 DIM Y(300,4),X(300,20)
- 30 DEF FNY(Y)=159-(Y-YL)*159/(YH-YL)
- 40 DEF FNX(X)=32+(X-XL)*287/(XH-XL)
- 50 PRINT:PRINT
- 60 LE=32:X0=32:Y0=159:XL=0:YL=0:YH=1:XH=1
- 70 Y$="p post test":X$="p pre test"
- 80 INPUT "Sensitivity: ",SENS:IF SENS>=1 THEN SENS=SENS/100
- 90 INPUT "Specificity: ",SPEC:IF SPEC>=1 THEN SPEC=SPEC/100
- 95 PRINT:PRINT"Display full range of pre-test probabilities? ";:Z$=INPUT$(1):BEEP:PRINTZ$:Z=Z$="n" OR Z$="N"
- 97 IF Z THEN PRINT"Maximum p to be displayed: a) .1" ELSE 100
- 98 PRINT" b) .01"
- 99 Z$=INPUT$(1):BEEP:IF Z$="a" OR Z$="A" THEN XH=0.1 ELSE XH=0.01
- 100 PRINT:PRINT"Computing predictive values..."
- 110 FOR I=0 TO 300
- 120 P=XH*I/300:X(I,0)=P
- 130 A=SENS*P:C=P-A:D=SPEC*(1-P):B=1-A-C-D
- 140 Y(I,0)=A/(A+B):Y(I,2)=C/(D+C)
- 150 NEXT I
- 160 REM *********** ADJUST VALUES ************
- 170 PRINT"Scaling graph..."
- 180 FOR I=1 TO 300
- 190 FOR M=0 TO 2 STEP 2
- 200 Y=Y(I,M):Y(I,M+1)=INT(FNY(Y)+0.5)
- 210 NEXT M
- 220 X=X(I,0):X(I,1)=INT(FNX(X)+0.5)
- 230 NEXT I
- 240 REM ********** PLOT BARS ****************
- 250 SCREEN 1: CLS
- 260 LINE (32,Y0)-(320,Y0)
- 270 LINE (X0,0)-(X0,159)
- 280 FOR I=2 TO 300
- 290 FOR M=1 TO 3 STEP 2:LINE (X(I-1,1),Y(I-1,M))-(X(I,1),Y(I,M)):NEXT M
- 300 NEXT I
- 310 REM ****** LINEAR Y AXIS ********
- 320 FOR I=1 TO 0 STEP -0.1
- 330 Y=I: LINE (X0+4,FNY(Y))-(X0,FNY(Y)):LOCATE INT(((FNY(Y))*20/159)+1.5),INT (X0/8-1.9)
- 340 IF Y=1 THEN PRINT "1.0":GOTO 360
- 350 PRINT USING " .#";Y
- 360 NEXT I
- 370 FOR I=1 TO 0 STEP -0.05
- 380 IF I<=YH THEN Y=I: LINE (X0+2,FNY(Y))-(X0,FNY(Y))
- 390 NEXT I
- 400 FOR I=1 TO LEN (Y$)
- 410 LOCATE 11-INT(LEN (Y$)/2)+I,1
- 420 PRINT MID$(Y$,I,1)
- 430 NEXT I
- 440 REM ****** LINEAR X AXIS ********
- 441 DC=XH/10
- 450 FOR I=XH TO 0 STEP -DC
- 460 X=I:LINE (FNX(X),Y0-4)-(FNX(X),Y0):LOCATE INT(Y0/8)+2,INT(FNX(X)*0.12-0.7)
- 470 IF X=1 THEN PRINT " 1";:GOTO 490
- 475 IF X>=0.095 THEN PRINT USING " .#";X:GOTO 490
- 480 IF X>=0.01 THEN PRINT USING " .##";X
- 490 NEXT I
- 495 STP=DC/5
- 500 FOR I=XH TO 0 STEP -STP
- 510 X=I:LINE (FNX(X),Y0-2)-(FNX(X),Y0)
- 520 NEXT I
- 530 FOR I=1 TO LEN (X$)
- 540 LOCATE 22,21-INT(LEN (X$)/2)+I
- 550 PRINT MID$ (X$,I,1)
- 560 NEXT I
- 580 LOCATE 1,6:PRINT"+"
- 590 LOCATE 19,39:PRINT"-"
- 600 FOR I=1 TO 5000:NEXT I
- 610 LOCATE 21,4
- 620 LINE INPUT "";Z$
- 630 SCREEN 0:WIDTH 80
- 635 LOCATE 8,14:PRINT"Sensitivity=";SENS;" Specificity=";SPEC
- 640 LOCATE 10,12:PRINT"pre-test probability - test + test"
- 650 PRINT" -------------------- ------ ------"
- 655 PRINT
- 660 INPUT;" ";P:IF P>=1 THEN P=P/100
- 665 IF P=0 THEN RUN "menu.bas"
- 670 A=SENS*P:C=P-A:D=SPEC*(1-P):B=1-A-C-D
- 680 PRINT TAB(41);:PRINT USING ".####### .######";1-D/(D+C),A/(A+B)
- 690 GOTO 660
-